perm filename SCANER.SAI[SYS,HE]9 blob
sn#082903 filedate 1974-01-18 generic text, type T, neo UTF8
COMMENT ⊗ VALID 00010 PAGES
RECORD PAGE DESCRIPTION
00001 00001
00003 00002 ENTRY XTENT
00007 00003 ⊃ CHANGE CLIP LEVEL MAX. DIFF. AND SET CLIPS TO IT
00010 00004 ⊃ DEBUGGING ROUTINES
00012 00005 ⊃ INITIALIZES SENSITIVITY CONTROL
00015 00006 ⊃ SET CLIP LEVELS TO JUST INCLUDE THE RANGE
00018 00007 ⊃ GENERAL ACCOMODATION ROUTINE
00023 00008 ⊃ ENTRY TO KEEP RASTER INTERSECTION IN BOUNDS
00025 00009 ⊃ VERIFIES THAT DETECTED DISCONTINUITY BELONGS TO AN OBJECT EDGE OF
00029 00010 ⊃ TEST WHETHER I2 (NEXT SCAN POINT) DIFFERS
00031 ENDMK
⊗;
ENTRY XTENT;
BEGIN "SCNER"
REQUIRE "PREAMB.SAI[SYS,HE]" SOURCE_FILE;
REQUIRE "DPYSUB.HDR[SYS,HE]" SOURCE_FILE;
REQUIRE 500 STRING_SPACE;
EXTERNAL INTEGER PROCEDURE GETPNT(INTEGER X,Y);
EXTERNAL PROCEDURE INTPNT;
EXTERNAL PROCEDURE TVIN;
EXTERNAL INTEGER PROCEDURE GENTER(INTEGER X,Y; REFERENCE BOOLEAN O;
REFERENCE INTEGER D);
EXTERNAL INTEGER PROCEDURE DDACO(INTEGER DAC);
EXTERNAL INTEGER PROCEDURE YOPER(INTEGER X,Y; REFERENCE INTEGER ANG;
INTEGER CW; BOOLEAN TRAC,FLAG);
DEFINE CRLF="'15&'12",⊃="COMMENT", TVRESET="STVFL←0", SAFEX="SAFE",
TVX(X)="(X)*3.0-512.0", TVY(Y)="512.0-(Y)*3.0";
EXTERNAL BOOLEAN ACCOMINIT; ⊃ RESETS STATISTICS FOR NEW SCENE;
EXTERNAL SHORT INTEGER BCLIP, TCLIP, FLINE, LLINE, RSIDE, LSIDE, IND, TMAX,
BMAX, LSMAX, RSMAX, STVFL, IWID, TVCAM, GTHRES, JOBNUM, CLDIFF,
NODAC;
EXTERNAL REAL OD, OB;
SHORT INTEGER INT,INT2,KKP,FRAMEX,CLIPDIF,I1, I2, CW, TRAC, X2, Y2, DIR
LENSAV, WIDSAV;
INTERNAL BOOLEAN SCAN_ACC, SCAN_DIR;
BOOLEAN ADEB, DISSHW;
SAFEX INTEGER ARRAY DISPL[1:100];
SAFEX BOOLEAN ARRAY TDAC[0:63];
PRELOAD_WITH 0, [3] 1, 0, [3] -1;
SAFEX SHORT INTEGER ARRAY SDIRX[0:7];
PRELOAD_WITH 1, 1, 0, [3] -1, 0, 1;
SAFEX SHORT INTEGER ARRAY SDIRY[0:7];
SIMPLE PROCEDURE OUTCLIP(STRING LAB);
IF TYP_EDGE THEN
OUTSTR(LAB&" TCLIP="&CVS(TCLIP)&" BCLIP="&CVS(BCLIP)&CRLF);
⊃ CHECK CLIP LEVEL AND ADJUST IF CHANGED;
SIMPLE INTERNAL PROCEDURE REINIT;
IF ABS(TCLIP-BCLIP)<CLIPDIF THEN
BEGIN
TCLIP←(7-CLIPDIF) DIV 2;
BCLIP←TCLIP+CLIPDIF;
TVRESET;
OUTCLIP("REINIT");
END;
⊃ CHANGE CLIP LEVEL MAX. DIFF. AND SET CLIPS TO IT;
SIMPLE INTERNAL PROCEDURE CLIPCHG(INTEGER DIF);
BEGIN
IF DIF<0 THEN DIF←0;
IF DIF>7 THEN DIF←7;
CLIPDIF ← DIF;
REINIT;
END;
SIMPLE INTEGER PROCEDURE DACO(INTEGER D);
IF 0<D≤62 THEN
BEGIN INTEGER I;
I ← DDACO(D);
TDAC[D] ← FALSE;
TVRESET;
IF TYP_EDGE THEN
OUTSTR("DAC SET AT "&CVS(D)&" AD="&CVS(I)&CRLF);
RETURN(I);
END;
⊃ VARIABLES USED FOR SENSITIVITY CONTROL
AUTO_ACC SETTING OF DAC AT AUTOTARGET LIMIT
AUTOCAL_ACC TABLE_ACC INITIALIZED
DAC_ACC CURRENT DAC SETTING
SENSCAL_ACC SENSITIVITY HAS BEEN CALIBRATED
SENSIGN_ACC LAST CHANGE 1 UP, -1 DOWN [NOT USED]
SENSFLAG_ACC SENSITIVITY CAN BE RAISED [NOT USED]
SENDWNFG_ACC SENSITIVITY CANNOT BE LOWERED [NOT USED]
SCAN_ACC FALSE IF ACCOMODATION DESIRED ON INITIAL SCAN [NOT USED]
SCAN_DIR DIRECTION SENSITIVITY IS ALLOWED TO CHANGE
-1 DOWN, 1 UP, 0 EITHER
CHANGE_ACC TRUE IF SCENE HAS CHANGED
ACCOMINIT TRUE IF EDGE FOLLOWER SHOULD INIT SCANNER
TABLE_ACC HOLDS AD READINGS FOR DAC SETTINGS READ, -1 FOR OTHERS
;
SIMPLE INTERNAL PROCEDURE ACCOON;
BEGIN INTEGER I;
IF DISDEV≠2 THEN OUTSTR("NO DEBUGGING ON THIS DEVICE"&CRLF) ELSE
IF (FRAMEX←GETPOG)≥0 THEN DISSHW←ADEB←TRUE ELSE
OUTSTR("NO FREE FRAMES - ACCOON"&CRLF);
END;
SIMPLE INTERNAL PROCEDURE ACCOFF;
BEGIN
ADEB ← FALSE;
RELPOG(FRAMEX);
END;
⊃ DEBUGGING ROUTINES;
SIMPLE PROCEDURE SHOW(STRING FOO; INTEGER X1,Y1,X2,Y2);
BEGIN INTEGER I, CNT, DISSAVE;
DISSAVE ← DPYPARS;
DPYSET(DISPL);
DPYBRT(3);
DPYBIG(3);
SETFORMAT(3,0);
AIVECT(-512,400);
DPYSST(FOO&CRLF&"TCLIP="&CVS(TCLIP)&CRLF&"BCLIP="&CVS(BCLIP)&CRLF&
"DAC="&CVS(DAC_ACC)&CRLF&"INT1="&CVS(I1)&CRLF&"INT2="&
CVS(I2)&CRLF&"IWID="&CVS(IWID));
DPYSST(CRLF&"AUTO_ACC ="&CVS(AUTO_ACC)&CRLF);
DPYSST("CHANGE= "&(IF CHANGE_ACC THEN "TRUE" ELSE "FALSE"));
DPYSST(CRLF&"SENS IS "&(IF ¬SENSFLAG_ACC THEN "UP" ELSE
IF SENDWNFG_ACC THEN "DOWN" ELSE ""));
APT(TVX(X1),TVY(Y1));
APT(TVX(X2),TVY(Y2));
DPYOUT(FRAMEX);
DPYRESET(DISSAVE);
IF CNT≤0 THEN
BEGIN
IF "0"≤(I←INCHRW)≤"9" THEN CNT←CNT+I-"0"
END ELSE CNT←CNT-1;
IF I="Y" THEN DISSHW ← TRUE;
IF I="N" THEN DISSHW ← FALSE;
END;
⊃ INITIALIZES SENSITIVITY CONTROL;
SIMPLE PROCEDURE SENSINIT;
BEGIN LABEL HALF, LOUT, L2;
SHORT INTEGER UDAC, LDAC, I, J, K, TST, PT, CURAD;
IF ¬AUTOCAL_ACC THEN
L2: BEGIN "INIT"
FOR I←2 STEP 1 UNTIL 61 DO TABLE_ACC[I] ← -1;
AUTO_ACC ← 60;
TABLE_ACC[LDAC←62] ← DACO(LDAC);
TABLE_ACC[UDAC←1] ← DACO(UDAC);
IF ABS(TABLE_ACC[62]-TABLE_ACC[1])<100 THEN
BEGIN
OUTSTR("SENSITIVITY CONTROL IS HUNG"&CRLF&
"TYPE R TO RETRY, ANYTHING ELSE"
&" TO DISABLE"&CRLF);
I ← INCHWL;
IF I="R" THEN GO TO L2;
NODAC ← TRUE;
RETURN;
END;
AUTOCAL_ACC ← TRUE;
GO TO HALF;
END "INIT";
TABLE_ACC[1] ← CURAD ← DACO(1);
IF ABS(CURAD-(J←TABLE_ACC[AUTO_ACC]))<40 THEN GO TO LOUT;
IF CURAD<J THEN
BEGIN "HI"
UDAC ← 1;
LDAC ← AUTO_ACC;
AUTO_ACC ← AUTO_ACC-1;
GO TO HALF;
END "HI";
TST ← 10000;
FOR I←62 STEP -1 UNTIL AUTO_ACC DO
IF (J←TABLE_ACC[I])≥0∧(K←ABS(CURAD-J))<TST THEN
BEGIN
IF K<20 THEN BEGIN AUTO_ACC ← I; GO TO LOUT; END;
TST ← K; PT ← I;
END;
J ← IF K←(TABLE_ACC[PT]>CURAD) THEN -1 ELSE 0;
TST ← PT;
WHILE TABLE_ACC[TST←TST+J]<0 DO;
IF K THEN BEGIN LDAC←PT; UDAC←TST; END ELSE
BEGIN LDAC←TST; UDAC←PT; END;
IF LDAC-UDAC<2 THEN
LOUT: BEGIN "OUT"
SENSCAL_ACC ← TRUE;
CHANGE_ACC ← FALSE;
IF AUTO_ACC≠DAC_ACC THEN DACO(AUTO_ACC);
IF TYP_EDGE THEN OUTSTR("AUTO TARGET SET AT "&
CVS(AUTO_ACC)&CRLF);
RETURN;
END "OUT";
HALF: I ← (LDAC+UDAC) DIV 2;
CURAD ← TABLE_ACC[I] ← DACO(I);
IF ABS(CURAD-TABLE_ACC[UDAC])<50 THEN
BEGIN "L1"
UDAC ← I;
IF LDAC-UDAC<2 THEN
BEGIN
IF CURAD-TABLE_ACC[I-1]>50 THEN DACO(AUTO_ACC←I-1)
ELSE AUTO_ACC←I;
GO TO LOUT;
END;
GO TO HALF;
END "L1";
LDAC ← I;
AUTO_ACC ← LDAC-1;
IF LDAC-UDAC<2 THEN GO TO LOUT;
GO TO HALF;
END;
⊃ SET CLIP LEVELS TO JUST INCLUDE THE RANGE
OF INTENSITIES GIVEN;
SIMPLE BOOLEAN PROCEDURE CLIPSET(REFERENCE SHORT INTEGER INT, INT2);
BEGIN SHORT INTEGER BIG, T, B;
T←TCLIP+(BCLIP-TCLIP)*(15-(INT MAX INT2))%14;
B←BCLIP-(BCLIP-TCLIP)*(INT MIN INT2)%14;
IF T>B THEN
BEGIN
OUTSTR("CLIP LEVELS REVERSED - CLIPRANGE"&CRLF);
TCLIP↔BCLIP;
END;
IF TCLIP=T∧BCLIP=B THEN RETURN(TRUE);
TCLIP←T;BCLIP←B;TVRESET;
RETURN(FALSE);
END;
⊃ TEST FOR RASTER SCAN FOR ACOMTEST.
X2, Y2 MUST BE SET BEFORE CALLING;
SIMPLE BOOLEAN PROCEDURE TEST1(REFERENCE SHORT INTEGER X,Y);
BEGIN SHORT INTEGER I, J;
I1 ← GENTER(X, Y, J←-1,I);
I2 ← GENTER(X2, Y2, J←-1,I);
RETURN(ABS(I1-I2)≥GTHRES∨((I1 MIN I2)>0∧(I1 MAX I2)<15));
END;
⊃ TEST FOR EDGE TRACING. TRAC, CW MUST BE SET BEFORE CALLING;
SIMPLE BOOLEAN PROCEDURE TEST2(REFERENCE SHORT INTEGER X,Y);
BEGIN
SHORT INTEGER I,COH;
COH ← YOPER(X, Y, DIR, CW, TRAC, I←0);
I1 ← OD+.5;
I2 ← OB+.5;
RETURN(COH≥2);
END;
⊃ TEST FOR RASTER SCAN FOR FINEAC. X2, Y2 MUST BE SET BEFORE CALLING;
SIMPLE BOOLEAN PROCEDURE TEST3(REFERENCE SHORT INTEGER X,Y);
BEGIN SHORT INTEGER I, J;
I1 ← GENTER(X, Y, J←-1, I);
I2 ← GENTER(X2, Y2, J←-1, I);
RETURN(ABS(I1-I2)≥GTHRES);
END;
⊃ GENERAL ACCOMODATION ROUTINE;
BOOLEAN PROCEDURE ACC(BOOLEAN CC;SHORT INTEGER MDAC, X, Y;
BOOLEAN PROCEDURE TST);
BEGIN INTEGER I, J, MX, MN, AD, K, BS, TS;
LABEL L1, A, B, C;
⊃ QUICK TEST FOR AUTOTARGET LIMIT;
IF TVCAM=1 THEN
BEGIN
IF (¬I1∨¬I2)∧BCLIP=7∧(AUTO_ACC=DAC_ACC∨NODAC)∧¬CHANGE_ACC∧
(BCLIP-TCLIP)≤CLIPDIF THEN RETURN(FALSE);
END ELSE IF (¬I1∨¬I2)∧BCLIP=7∨(I1=15∨I2=15)∧¬TCLIP
∧(BCLIP-TCLIP)≤CLIPDIF THEN RETURN(FALSE);
IF NODAC∧CLIPDIF≥7 THEN RETURN(FALSE);
⊃ INIT LEGAL DAC TABLE;
IF ¬NODAC THEN
BEGIN
TDAC[63] ← FALSE;
TDAC[AUTO_ACC-1] ← FALSE;
TDAC[AUTO_ACC] ← TRUE;
ARRBLT(TDAC[AUTO_ACC+1],TDAC[AUTO_ACC],62-AUTO_ACC);
END;
IF CLIPDIF<7 THEN
BEGIN
BS ← BCLIP;
TS ← TCLIP;
IF BCLIP<7∨TCLIP THEN
BEGIN BCLIP ← 7; TCLIP ← 0; TVRESET; END;
END;
⊃ ADJUST DAC AS NECESSARY AND POSSIBLE;
L1: IF TST(X,Y) THEN GO TO B;
MN ← I1 MIN I2;
MX ← I1 MAX I2;
IF MX>15 THEN
BEGIN
OUTSTR("INT TOO LARGE"&CRLF);
MX←15;
IF I1>15 THEN I1←15 ELSE I2←15;
END;
IF MN<0 THEN
BEGIN
OUTSTR("INT TOO SMALL"&CRLF);
MX←0;
IF I1<0 THEN I1←0 ELSE I2←0;
END;
IF (¬MN∧MX=15)∨(MN>0∧MX<15)∨(MX-MN)>GTHRES∨TVCAM≠1∨NODAC
THEN GO TO A;
IF MN THEN
BEGIN "MN"
FOR I←1 STEP 1 UNTIL MDAC+1 DO
IF ¬TDAC[DAC_ACC+I] THEN DONE;
I ← I-1;
IF ¬I THEN GO TO A;
J ← DAC_ACC;
TABLE_ACC[DAC_ACC+I] ← DACO(DAC_ACC+I);
IF ADEB THEN SHOW("DOWN",X,Y,X2,Y2);
GO TO L1;
END "MN";
AD ← 0;
FOR I←1 STEP 1 UNTIL MDAC+1 DO IF ¬TDAC[DAC_ACC-I] THEN DONE;
I ← I-1;
IF ¬I THEN
BEGIN
IF (DAC_ACC-1>AUTO_ACC)∨¬CHANGE_ACC THEN GO TO A;
I ← MDAC ← 1;
TABLE_ACC[DAC_ACC] ← AD ← DDACO(-1);
END;
J ← DAC_ACC;
I ← TABLE_ACC[DAC_ACC-I] ← DACO(DAC_ACC-I);
IF ADEB THEN SHOW("UP",X,Y,X2,Y2);
IF AD THEN
BEGIN "AD"
IF ABS(AD-I)<10 THEN
BEGIN DAC_ACC←J;CHANGE_ACC←FALSE;GO TO A;END;
TDAC[AUTO_ACC←DAC_ACC] ← TRUE;
TDAC[AUTO_ACC-1] ← FALSE;
END "AD";
GO TO L1;
⊃ ADJUST CLIPS FOR PROPER OUTPUT;
A: IF CLIPDIF=7 THEN GO TO C;
IF I1>15 THEN BEGIN OUTSTR("I1 TOO LARGE"&CRLF);I1←15;END;
IF I2>15 THEN BEGIN OUTSTR("I2 TOO LARGE"&CRLF);I2←15;END;
IF I1<0 THEN BEGIN OUTSTR("I1 TOO SMALL"&CRLF);I1←0;END;
IF I2<0 THEN BEGIN OUTSTR("I2 TOO SMALL"&CRLF);I2←0;END;
IF CLIPSET(I1, I2) THEN GO TO C;
IF TST(X,Y) THEN
B: AD ← TRUE ELSE
BEGIN
IF TCLIP≠BCLIP THEN GO TO A;
C: AD ← FALSE;
END;
IF BS≠BCLIP∨TS≠TCLIP THEN OUTCLIP("ACC") ELSE
IF TYP_EDGE THEN OUTSTR("CLIPS RETAINED"&CRLF);
RETURN(AD);
END;
⊃ ENTRY TO KEEP RASTER INTERSECTION IN BOUNDS;
SIMPLE INTERNAL BOOLEAN PROCEDURE ACOMTEST(REFERENCE SHORT INTEGER INT, INT2;
SHORT INTEGER X,Y,LX,LY);
BEGIN SHORT INTEGER A, B, C, TST;
A ← TCLIP;
B ← BCLIP;
C ← DAC_ACC;
X2 ← LX;
Y2 ← LY;
I1 ← INT;
I2 ← INT2;
ACC(TRUE,3,X,Y,TEST1);
INT ← I1;
INT2 ← I2;
IF BCLIP-TCLIP<CLIPDIF THEN
BEGIN
TCLIP ← (TCLIP+BCLIP+CLIPDIF) DIV 2;
BCLIP ← TCLIP+CLIPDIF;
IF BCLIP>7 THEN BEGIN BCLIP←7;TCLIP←7-CLIPDIF;END;
IF TCLIP<0 THEN BEGIN TCLIP←0;BCLIP←CLIPDIF;END;
END;
IF (TST ← A≠TCLIP∨B≠BCLIP∨C≠DAC_ACC) THEN OUTCLIP("ACOMTEST");
RETURN(TST);
END;
⊃ ENTRY TO ACCOMODATE WHEN AN EDGE IS LOST DURING A RASTER SCAN;
SIMPLE INTERNAL BOOLEAN PROCEDURE FINEAC(SHORT INTEGER X1,Y1,X,Y,INT,INT2);
BEGIN
X2 ← X;
Y2 ← Y;
I1 ← INT;
I2 ← INT2;
RETURN(ACC(FALSE,3,X1,Y1,TEST3));
END;
⊃ ENTRY TO ACCOMODATE WHEN AN EDGE IS LOST WHILE TRACING;
SIMPLE INTERNAL BOOLEAN PROCEDURE ACCOMO(SHORT INTEGER X,Y;
REFERENCE SHORT INTEGER ANGLE,CWX);
BEGIN BOOLEAN T;
TRAC ← TRUE;
X2 ← X;
Y2 ← Y;
CW ← CWX;
I1 ← OB+.5;
I2 ← OD+.5;
T ← ACC(FALSE,5,X,Y,TEST2);
ANGLE ← DIR;
RETURN(T);
END;
⊃ VERIFIES THAT DETECTED DISCONTINUITY BELONGS TO AN OBJECT EDGE OF
SUFFICIENT EXTENT THAT ATLEAST 14 POINTS IN A 4*4 RECT. WHOSE UPPER
OR LOWER LEFT HAND CORNER IS THE FIRST POINT THAT DIFFERED FROM THE
BACKGROUND ALSO DIFFER FROM THE BACKGROUND BY AT LEAST AS MUCH. XINCR
IS SIGNED INCREMENT IN X DIRECTION, SIGFLAG IS TRUE IF OBJECT(2ND
SAMPLE IN DIRECTION OF SCAN) IS BRIGHTER THAN BACKGROUND;
DEFINE RSET(X)="BEGIN IF TST THEN
BEGIN
FLINE←XT;
LLINE←XB;
LSIDE←XL;
RSIDE←XR;
TVIN;
END;
RETURN(X);
END";
SIMPLE INTERNAL BOOLEAN PROCEDURE XTENT(SHORT INTEGER X,Y,XINCR;
BOOLEAN SIGFLAG);
BEGIN "XTNT"
SHORT INTEGER K,L,COUNT1,COUNT2, STEPX,T,B,LL,R,XT,XB,XL,XR,TST,
SIDER,SIDEL,LINEF,LINEL,ND,INC;
XT←FLINE; XB←LLINE; XL←LSIDE; XR←RSIDE;
TST←FALSE;
STEPX ← IF SIGFLAG THEN 1 ELSE -1;
B←LINEL←(BMAX-1) MIN (Y+4);
T←LINEF←(Y-4) MAX (TMAX+1);
IF XINCR>0 THEN
BEGIN
INC←1;
LL←SIDEL←(LSMAX+1) MAX (X-XINCR-3);
R←SIDER←(RSMAX-1) MIN (X+3);
END ELSE BEGIN
INC←-1;
R←SIDEL←(RSMAX-1)MIN (X-XINCR+3);
LL←SIDER←(LSMAX+1) MAX (X-3);
END;
COUNT1←COUNT2←INT2←INT←0;
IF B>LLINE∨T<FLINE∨LL<LSIDE∨R>RSIDE THEN
BEGIN
LLINE←B;
FLINE←T;
LSIDE←LL;
RSIDE←R;
TVIN;
TST←TRUE;
INTPNT;
END;
LINEL←LINEL-FLINE;
LINEF←LINEF-FLINE;
SIDEL←SIDEL-LSIDE;
SIDER←SIDER-LSIDE;
ND←SIDEL+INC*3;
FOR K←SIDEL STEP INC UNTIL ND DO
BEGIN
FOR L←LINEF STEP 1 UNTIL LINEF+3 DO
BEGIN
INT←INT+GETPNT(K,L);
COUNT1 ← COUNT1+1;
END;
FOR L←LINEF+5 STEP 1 UNTIL LINEL DO
BEGIN
INT2←INT2+GETPNT(K,L);
COUNT2 ← COUNT2+1;
END;
END;
INT ← INT/COUNT1+.5;
INT2←INT2/COUNT2+.5;
INT ← IF SIGFLAG THEN INT MIN INT2 ELSE INT MAX INT2;
ND←SIDER-INC*3;
COUNT2 ← COUNT1←0;
FOR K←ND STEP INC UNTIL SIDER DO
FOR L←LINEF STEP 1 UNTIL LINEF+3 DO
BEGIN "XT2"
INT2←GETPNT(K,L);
IF ABS(INT2-INT)≥GTHRES THEN COUNT1 ← COUNT1+1;
COUNT2 ← COUNT2+1;
END "XT2";
IF COUNT2-COUNT1<GTHRES THEN RSET(TRUE);
COUNT1 ← COUNT2←0;
FOR K←ND STEP INC UNTIL SIDER DO
FOR L←LINEF+5 STEP 1 UNTIL LINEL DO
BEGIN "XT5"
INT2←GETPNT(K,L) ;
IF ABS(INT2-INT)≥GTHRES THEN COUNT2 ← COUNT2+1;
COUNT1 ← COUNT1+1;
END "XT5";
RSET(COUNT1-COUNT2<3);
END "XTNT";
⊃ TEST WHETHER I2 (NEXT SCAN POINT) DIFFERS
IN THE RIGHT WAY FROM I1 TO AN EXTENT SUFFICIENT
TO CONSTITUTE A POSSIBLE EDGE;
SIMPLE INTERNAL BOOLEAN PROCEDURE DISCON(INTEGER II1,II2,X1,Y1,X2,Y2);
BEGIN "DISCO"
I1←II1;
I2←II2;
IF ADEB∧DISSHW THEN SHOW("DISCON",X1,Y1,X2,Y2);
RETURN(ABS(I2-I1)≥GTHRES);
END "DISCO";
⊃ CALLED AT START OF RUN;
SIMPLE INTERNAL INTEGER PROCEDURE SCANINIT;
BEGIN "INIT"
IF TVCAM=1 THEN
BEGIN "ACCOM"
IF DAC_ACC<0 THEN DACO(-DAC_ACC);
SCAN_DIR ← 0;
IF (¬SENSCAL_ACC∨CHANGE_ACC) THEN SENSINIT;
END "ACCOM" ELSE BEGIN
CHANGE_ACC←FALSE;
SENSCAL_ACC←TRUE;
DAC_ACC←AUTO_ACC←30;
END;
TCLIP ← BCLIP ← 5;
CLIPCHG(CLDIFF);
END "INIT";
END "SCNER";